package com.ruoyi.site.service;

import java.util.List;
import com.ruoyi.site.domain.OrderDetails;

/**
 * 订单详情Service接口
 * 
 * @author chuckeytang
 * @date 2025-08-17
 */
public interface IOrderDetailsService 
{
    /**
     * 查询订单详情
     * 
     * @param orderId 订单详情主键
     * @return 订单详情
     */
    public OrderDetails selectOrderDetailsByOrderId(Long orderId);

    /**
     * 查询订单详情列表
     * 
     * @param orderDetails 订单详情
     * @return 订单详情集合
     */
    public List<OrderDetails> selectOrderDetailsList(OrderDetails orderDetails);

    /**
     * 根据用户ID查询订单详情列表 (前台用户查看)
     * * @param userId 用户ID
     * @return 订单详情集合
     */
    public List<OrderDetails> selectOrderDetailsListByUserId(Long userId);

    /**
     * 新增订单详情
     * 
     * @param orderDetails 订单详情
     * @return 结果
     */
    public int insertOrderDetails(OrderDetails orderDetails);

    /**
     * 修改订单详情
     * 
     * @param orderDetails 订单详情
     * @return 结果
     */
    public int updateOrderDetails(OrderDetails orderDetails);

    /**
     * 批量删除订单详情
     * 
     * @param orderIds 需要删除的订单详情主键集合
     * @return 结果
     */
    public int deleteOrderDetailsByOrderIds(Long[] orderIds);

    /**
     * 删除订单详情信息
     * 
     * @param orderId 订单详情主键
     * @return 结果
     */
    public int deleteOrderDetailsByOrderId(Long orderId);

    /**
     * 从购物车创建订单
     * @param userId 当前登录的用户ID
     * @return 创建的订单详情
     */
    public OrderDetails createOrderFromCart(Long userId);

    /**
     * 检查用户是否已购买某个 Track
     * @param userId 用户ID
     * @param trackId 音乐ID
     * @return 是否已购买
     */
    boolean checkUserHasPurchasedTrack(Long userId, Long trackId);

    /**
     * 为单个产品创建订单（跳过购物车）
     * @param userId 当前登录用户ID
     * @param productType 产品类型 ('track', 'sfx')
     * @param productId 产品ID (trackId 或 sfxId)
     * @param licenseOption 授权选项 ('standard')
     * @return 创建的订单详情 OrderDetails
     */
    OrderDetails createOrderForSingleItem(Long userId, String productType, Long productId, String licenseOption);

    /**
     * 支付成功后，根据订单记录为用户发放授权
     * @param orderId 订单ID
     */
    void grantLicensesForOrder(Long orderId);
}
